package com.example.com.common.app;

import android.annotation.SuppressLint;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;

import com.example.com.common.R;
import com.example.com.common.utils.ActivityTack;
import com.example.com.common.utils.UIUtil;
import com.example.com.common.view.dialog.IDialog;

import java.util.List;

import butterknife.ButterKnife;

/**
 * 基类activity
 *
 * @author qiujuer
 */

public abstract class BaseActivity extends AppCompatActivity {
    private Dialog progressDialog = null;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 在界面未初始化之前调用的初始化窗口
        initWidows();
        if (initArgs(getIntent().getExtras())) {
            // 得到界面Id并设置到Activity界面中
            int layId = getContentLayoutId();
            setContentView(layId);
            //ButterKnife初始化之前的操作
            initBefore();
            //初始化控件
            initWidget();
            initData();
            initEven();
            ActivityTack.getInstanse().addActivity(this);
        } else {
            finish();
        }

    }

    /**
     * 初始化控件调用之前
     */
    protected void initBefore() {
        //改变状态栏的颜色
        UIUtil.setStatusBarColor(this, R.color.main_status_bar);
//        BarUtils.setStatusBarColor(this, getResources().getColor(R.color.main_status_bar),0,false);
    }

    /**
     * 初始化窗口
     */
    protected void initWidows() {

    }

    /**
     * 初始化相关参数
     *
     * @param bundle 参数Bundle
     * @return 如果参数正确返回True，错误返回False
     */
    protected boolean initArgs(Bundle bundle) {
        return true;
    }

    /**
     * 得到当前界面的资源文件Id
     *
     * @return 资源文件Id
     */
    protected abstract int getContentLayoutId();

    /**
     * 初始化控件
     */
    protected void initWidget() {
        ButterKnife.bind(this);
    }

    /**
     * 初始化数据
     */
    protected void initData() {

    }

    /**
     * 事件初始化
     */
    protected void initEven() {

    }


    public void showProgressDialog(String msg) {
        if (progressDialog == null || !progressDialog.isShowing() && !isFinishing()) {
            progressDialog = IDialog.getInstance().showProgressDialog(this, msg);
            // 不可触摸取消
            progressDialog.setCanceledOnTouchOutside(false);
            // 强制取消关闭界面
            progressDialog.setCancelable(true);
        }
    }

    /**
     * @param msg
     * @param cancelAble 是否可返回取消
     */
    public void showProgressDialog(String msg, boolean cancelAble) {
        if (progressDialog == null || !progressDialog.isShowing() && !isFinishing()) {
            progressDialog = IDialog.getInstance().showProgressDialog(this, msg);
            progressDialog.setCancelable(cancelAble);
            progressDialog.setCanceledOnTouchOutside(cancelAble);
        }
    }

    public void dismissProgressDialog() {
        if (progressDialog != null) {
            if (progressDialog.isShowing())
                progressDialog.dismiss();
            progressDialog = null;
        }
    }

    @Override
    protected void onDestroy() {
        ActivityTack.getInstanse().removeActivity(this);
        super.onDestroy();
    }

    @Override
    public boolean onSupportNavigateUp() {
        // 当点击界面导航返回时，Finish当前界面
        finish();
        return super.onSupportNavigateUp();
    }

    @Override
    public void onBackPressed() {
        // 得到当前Activity下的所有Fragment
        @SuppressLint("RestrictedApi")
        List<Fragment> fragments = getSupportFragmentManager().getFragments();
        // 判断是否为空
        if (fragments != null && fragments.size() > 0) {
            for (Fragment fragment : fragments) {
                // 判断是否为我们能够处理的Fragment类型
                if (fragment instanceof BaseFragment) {
                    // 判断是否拦截了返回按钮
                    if (((BaseFragment) fragment).onBackPressed()) {
                        // 如果有直接Return
                        return;
                    }
                }
            }
        }

        super.onBackPressed();
        finish();
    }
}
